<?php
// 确保在输出任何内容之前设置header
header('Content-Type: application/json');

// 临时启用错误显示（用于调试）
ini_set('display_errors', 1);
error_reporting(E_ALL);

// 检查并设置错误报告
ini_set('display_errors', 0);
error_reporting(0);

// 临时增加内存限制和超时时间
ini_set('memory_limit', '256M');
ini_set('max_execution_time', 30);

// 启用错误日志记录
error_log('Upload request received at: ' . date('Y-m-d H:i:s'));
error_log('Request method: ' . $_SERVER['REQUEST_METHOD']);
error_log('Cookie enorg: ' . ($_COOKIE['enorg'] ?? 'not set'));

// 检查cookie是否存在
if (!isset($_COOKIE['enorg'])) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'message' => 'Cookie enorg 未设置，请重新登录'
    ]);
    exit;
}

$orgName = $_COOKIE['enorg'];
$tempmu = '/'.$orgName.'-output/temp/';

error_log('Organization: ' . $orgName);

try {
    // 检查是否有文件上传或base64数据
    $hasFileUpload = isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK;
    $hasBase64Data = isset($_POST['base64_data']) && !empty($_POST['base64_data']);

    if (!$hasFileUpload && !$hasBase64Data) {
        throw new Exception('没有上传文件或base64数据');
    }

    // 创建目标目录 - 使用绝对路径
    $baseDir = $_SERVER['DOCUMENT_ROOT'] . '/' . $_COOKIE['enorg'] . '-output/temp';
    // 备用目录路径
    $fallbackDir = $_SERVER['DOCUMENT_ROOT'] . '/' . $_COOKIE['enorg'] .'-output/temp';
    $dateDir = date('Ymd');
    $targetDir = $baseDir . '/' . $dateDir;

    error_log('Base directory: ' . $baseDir);
    error_log('Target directory: ' . $targetDir);

    if (!file_exists($baseDir)) {
        error_log('Creating base directory: ' . $baseDir);
        if (!mkdir($baseDir, 0755, true)) {
            // 尝试使用备用目录
            $baseDir = $fallbackDir;
            $targetDir = $baseDir . '/' . $dateDir;
            error_log('Using fallback directory: ' . $baseDir);
            if (!file_exists($baseDir)) {
                if (!mkdir($baseDir, 0755, true)) {
                    throw new Exception('无法创建基础目录');
                }
            }
        }
    }

    if (!file_exists($targetDir)) {
        error_log('Creating target directory: ' . $targetDir);
        if (!mkdir($targetDir, 0755, true)) {
            throw new Exception('无法创建目标目录: ' . $targetDir);
        }
    }

    // 生成文件名（按序号排列）
    $counterFile = $targetDir . '/.counter';
    if (file_exists($counterFile)) {
        $counter = (int)file_get_contents($counterFile) + 1;
    } else {
        $counter = 1;
    }
    file_put_contents($counterFile, $counter);

    $filename = $counter . '.webp';
    $targetPath = $targetDir . '/' . $filename;

    if ($hasFileUpload) {
        // 处理文件上传
        $file = $_FILES['image'];

        // 验证文件类型
        $allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp'];
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mimeType = finfo_file($finfo, $file['tmp_name']);
        finfo_close($finfo);

        if (!in_array($mimeType, $allowedTypes)) {
            throw new Exception('不支持的文件类型，仅支持 JPG、PNG、GIF、WebP 格式');
        }

        // 检查文件大小（限制10MB）
        if ($file['size'] > 10 * 1024 * 1024) {
            throw new Exception('文件大小不能超过10MB');
        }

        // 读取图片并转换为webp
        $imageData = file_get_contents($file['tmp_name']);
        $image = imagecreatefromstring($imageData);

        if (!$image) {
            throw new Exception('无法读取图片数据');
        }

        // 转换为webp格式，质量90%
        if (!imagewebp($image, $targetPath, 90)) {
            imagedestroy($image);
            throw new Exception('无法保存webp图片');
        }

        imagedestroy($image);
        $fileSize = filesize($targetPath);

    } else {
        // 处理base64数据
        $base64Data = $_POST['base64_data'];

        // 检查是否是有效的base64图片数据
        if (strpos($base64Data, 'data:image') === 0) {
            // 移除data:image/xxx;base64,前缀
            $base64Data = preg_replace('/^data:image\/\w+;base64,/', '', $base64Data);
        }

        // 解码base64数据
        $imageData = base64_decode($base64Data);

        if (!$imageData) {
            throw new Exception('无效的base64数据');
        }

        // 从二进制数据创建图片
        $image = imagecreatefromstring($imageData);

        if (!$image) {
            throw new Exception('无法从base64数据创建图片');
        }

        // 转换为webp格式，质量90%
        if (!imagewebp($image, $targetPath, 90)) {
            imagedestroy($image);
            throw new Exception('无法保存webp图片');
        }

        imagedestroy($image);
        $fileSize = filesize($targetPath);
    }

    // 构建返回的URL（完整网址）
    $relativePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', $baseDir) . '/' . $dateDir . '/' . $filename;

    // 获取当前协议和域名，构建完整URL
    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://';
    $host = $_SERVER['HTTP_HOST'];
    $url = $protocol . $host . $relativePath;

    echo json_encode([
        'success' => true,
        'url' => $url,
        'filename' => $filename,
        'path' => $relativePath,
        'size' => $fileSize,
        'type' => 'image/webp'
    ]);

} catch (Exception $e) {
    // 记录详细的错误信息
    error_log('Upload Error: ' . $e->getMessage());
    error_log('File: ' . $e->getFile() . ':' . $e->getLine());
    error_log('Trace: ' . $e->getTraceAsString());

    http_response_code(400);
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
?>
